package practiceProjects;

/**
 * @WARNING: 可能不安全，因为这是在第一版(有BUG)的基础上面的改版，还没有测试过
 * @Project ：learn_java
 * @File ：DesktopOrganization.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/10 18:41
 * @Description ：桌面的文档和图片太多了，写一个一键整理到指定文件夹
 * @BugHappend:
 * 第一版没有进行复制操作，只是创建了一个空文件，
 * 但是代码运行过后没有问题，
 * 我最开始还没有发现问题所在，
 * 后面发现复制过去的文件都是空的时候差点吓死，还好我测试前留有备份
 * 我也是才知道有现成的移动函数，这次差点酿成大错。
 */

import java.io.*;


public class DesktopOrganization {
    public static void main(String[] args) {
        String srcPath = "C:\\Users\\zhq11\\Desktop";

        // txt放置目标文件夹
        String txtDestPath = "C:\\Users\\zhq11\\Documents\\我的文档";

        // 图片放置目标文件夹
        String picDestPath = "C:\\Users\\zhq11\\Pictures\\嘛嘛嘛都是些什么";

        // md文件放置目标文件夹
        String mdDestPath = "E:\\DDD\\file\\typora文件";

        File file = new File(srcPath);

        File[] files = file.listFiles();

        if (files == null || files.length == 0) {
            System.out.println("桌面空空，不用继续");
            return;
        }

        for (File f : files) {
            if (f.getName().endsWith(".txt")) {
                moveFile(f, txtDestPath);
            } else if (f.getName().endsWith(".png")) {
                // 图片格式还可以更多，但我因为桌面基本都是pixpin的截图，
                // 暂且只写一个后缀
                moveFile(f, picDestPath);
            } else if (f.getName().endsWith("md")) {
                moveFile(f, mdDestPath);
            }
        }
    }

    public static void moveFile(File f, String destination) {
        File file1 = new File(destination, f.getName());
        if (file1.exists()) {
            System.out.println(file1 + "已存在，跳过");
            return;
        }
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file1))) {
            byte[] buffer = new byte[8192]; // 8KB 缓冲区
            int bytesRead;
            while ((bytesRead = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, bytesRead);
            }
            System.out.println(file1 + " 移动成功");
            // 因为是移动，所以复制过去过后，将删除原来的文件
            f.delete();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
